# 购物系统业务需求V1
# .0：（需要使用到列表技术）
# 购物：
# 1.
# 用户的账户里有钱
# 2.
# 用户可推一个空的购物车进商场
# 3.
# 开始购物，将自己想要的商品添加购物车
# 4.
# 打印购物小条
#
# 程序和数据流程梳理分析：
# 购前：
# 钱要有：money
# 有足够商品：列表来存储list
# 有购物车：列表list
#
# 购中：
# 是否有这个商品：
# 有
# 钱够不够：
# 够：
# 添加到购物车！
# 钱减去商品价格！
# 恭喜，购买成功！您的卡余额还剩xxx
# 不够：
# 穷鬼，钱不够！请到其他超市购买！
# 没有：
# 没有这个商品，别瞎弄！
# 购后：
# 输入Q，q: 退出：
# 打印购物小条！
# 初始化数据


# money = 100  # 用户的钱
# products = [("apple", 10), ("banana", 5), ("orange", 8)]  # 商品列表，每个商品是一个元组 (名称, 价格)
# cart = []  # 购物车
#
# def print_products():# 打印商品列表
#     print("Available products:")
#     for i, (name, price) in enumerate(products):
#         print(f"{i + 1}. {name} - ${price}")
#
# def add_to_cart(product_index):# 添加商品到购物车
#     global money
#     if product_index < 0 or product_index >= len(products):
#         print("没有这个商品，别瞎弄！")
#         return
#
#     name, price = products[product_index]# 获取商品信息
#     if money >= price:
#         cart.append((name, price))
#         money -= price
#         print(f"恭喜，购买成功！您的卡余额还剩{money}")
#     else:
#         print("穷鬼，钱不够！请到其他超市购买！")
#
# def print_receipt():# 打印购物小条
#     print("购物小条:")
#     total = 0
#     for name, price in cart:
#         print(f"{name} - ${price}")
#         total += price
#     print(f"总价: ${total}")
#     print(f"剩余余额: ${money}")
#
# def main():
#     while True:
#         print("\n欢迎来到购物系统！")
#         print("1. 查看商品")
#         print("2. 添加商品到购物车")
#         print("3. 打印购物小条")
#         print("Q. 退出")
#         choice = input("请输入您的选择: ").strip().lower()
#
#         if choice == '1':
#             print_products()
#         elif choice == '2':
#             print_products()
#             try:
#                 product_index = int(input("请输入要购买的商品编号: ")) - 1
#                 add_to_cart(product_index)
#             except ValueError:
#                 print("请输入有效的数字！")
#         elif choice == '3':
#             print_receipt()
#         elif choice in ['q', 'quit']:
#             print("感谢光临，再见！")
#             break
#         else:
#             print("无效的选择，请重新输入！")
#
# if __name__ == "__main__":
#     main()

# .0：
# 1.
# 现在用户在进商场之前需要从10张优惠券中，随机抽取一张优惠券。
# 比如抽到一个空凋的8折优惠券，后面在购物的过程中，空凋就可以按照8折后的价格来购买。
# 2.
# 优化购物小条的人性化打印。
# 购物时间，卡余额，购物数量，购买总商品的价值。
# 3.
# 添加退货功能。在购买途中，某个商品不要了，退回到购物架中！

import random
from datetime import datetime

# 初始化数据
money = 100  # 用户的钱
products = [("apple", 10), ("banana", 5), ("orange", 8), ("air conditioner", 100)]  # 商品列表，每个商品是一个元组 (名称, 价格)
cart = []  # 购物车

# 优惠券列表
coupons = [
    {"product": "air conditioner", "discount": 0.8},
    {"product": "apple", "discount": 0.9},
    {"product": "banana", "discount": 0.95},
    {"product": "orange", "discount": 0.9},
    {"product": "none", "discount": 1.0},  # 无折扣券
    {"product": "none", "discount": 1.0},
    {"product": "none", "discount": 1.0},
    {"product": "none", "discount": 1.0},
    {"product": "none", "discount": 1.0},
    {"product": "none", "discount": 1.0}
]


def print_products():  # 打印商品列表
    print("Available products:")
    for i, (name, price) in enumerate(products):
        print(f"{i + 1}. {name} - ${price}")


def add_to_cart(product_index):  # 添加商品到购物车
    global money
    if product_index < 0 or product_index >= len(products):
        print("没有这个商品，别瞎弄！")
        return

    name, price = products[product_index]
    # 应用优惠券折扣
    if coupon["product"] == name:
        price *= coupon["discount"]

    if money >= price:
        cart.append((name, price))
        money -= price
        print(f"恭喜，购买成功！您的卡余额还剩{money}")
    else:
        print("穷鬼，钱不够！请到其他超市购买！")


def print_receipt():  # 打印购物小条
    print("购物小条:")
    total = 0
    for name, price in cart:
        print(f"{name} - ${price}")
        total += price
    print(f"总价: ${total}")
    print(f"剩余余额: ${money}")
    print(f"购物数量: {len(cart)}")
    print(f"购物时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")


def return_product(product_index):  # 退货功能
    global money
    if product_index < 0 or product_index >= len(cart):
        print("没有这个商品，别瞎弄！")
        return

    name, price = cart.pop(product_index)
    money += price
    print(f"退货成功！{name} 已退回购物架，您的卡余额恢复到 {money}")


def main():
    global coupon
    # 抽取优惠券
    coupon = random.choice(coupons)  # 抽取优惠券
    if coupon["product"] != "none":
        print(f"恭喜您抽中了 {coupon['product']} 的 {int(coupon['discount'] * 10)} 折优惠券！")
    else:
        print("很遗憾，您没有抽中任何优惠券。")

    while True:
        print("\n欢迎来到购物系统！")
        print("1. 查看商品")
        print("2. 添加商品到购物车")
        print("3. 打印购物小条")
        print("4. 退货")
        print("Q. 退出")
        choice = input("请输入您的选择: ").strip().lower()

        if choice == '1':
            print_products()
        elif choice == '2':
            print_products()
            try:
                product_index = int(input("请输入要购买的商品编号: ")) - 1
                add_to_cart(product_index)
            except ValueError:
                print("请输入有效的数字！")
        elif choice == '3':
            print_receipt()
        elif choice == '4':
            if not cart:
                print("购物车为空，无法退货！")
                continue
            print("购物车中的商品:")
            for i, (name, price) in enumerate(cart):
                print(f"{i + 1}. {name} - ${price}")
            try:
                product_index = int(input("请输入要退货的商品编号: ")) - 1
                return_product(product_index)
            except ValueError:
                print("请输入有效的数字！")
        elif choice in ['q', 'quit']:
            print("感谢光临，再见！")
            break
        else:
            print("无效的选择，请重新输入！")


if __name__ == "__main__":
    main()
